ЧислоE.отд
Главная     ◄Глагол     ◄Азбука     ◄Задачи на Глаголе     Примеры приложений ►   Среда разработки ►   Отладка программ ►   Отличия от Оберона ►   Отличия от Паскаля ►   Ассемблер ARM ►   Глагол для ARM ►   ? и Ответы
 
 glagol.png Программируем по-русски
 

Основная задача Глагола — дать человеку возможность воплощать свои мысли на языке, близком к его родному языку.

Издатель Глагола
 

 

(******************************************************************************)
(**)                        ОТДЕЛ ЧислоЕ+;
(******************************************************************************)
(* НАЗНАЧЕНИЕ: вычисление 'ЗНАКОВ'=1024 числа "e" после запятой               *)
(* АЛГОРИТМ:                                                                  *)
(*   E = 1 + X1 + X2 + ... + Xi + ... , где Xi = 1/1/2/3/.../i                *)
(* ОБОЗНАЧЕНИЯ:                                                               *)
(*   р  - значение десятичного разряда                                        *)
(*   п  - позиция разряда                                                     *)
(*   п0 - число ведущих 0-х разрядов в Xi                                     *)
(******************************************************************************)
ИСПОЛЬЗУЕТ
  Вывод ИЗ "...\Отделы\Обмен\";

ПОСТ
  ЗНАКОВ=1024;
  ЦИФР=ЗНАКОВ + (ЗНАКОВ+31) ДЕЛИТЬ 32; (* цифр для расчёта *)

ВИД 
  Число=РЯД ЦИФР ИЗ ЯЧЦЕЛ;
  (* [0] - единицы
   * [1] - десятые
   * [2] - сотые
   * и т.д. *)

(******************************************************************************)
ЗАДАЧА Разделить(X+:Число; i,п0+:ЦЕЛ);  (* X:=X/i *)
ПЕР
  п,р:ЦЕЛ;
УКАЗ
  р:=0;
  ОТ п:=п0 ДО ЦИФР-1 ВЫП
    р:=10*р+X[п];
    X[п]:=УЗК(УЗКДЕЛИТЬ i));
    р:ОСТАТОК i
  КОН;
  (* продвигаем п0 *)
  ПОКА (п0 < ЦИФР) И (X[п0] = 0) ВЫП
    УВЕЛИЧИТЬ(п0) 
  КОН
КОН Разделить;

(******************************************************************************)
ЗАДАЧА Добавить(E+,X-:Число; п0:ЦЕЛ);  (* E:=E+X *)
ПЕР
  п:ЦЕЛ;
  р:ЯЧЦЕЛ;
УКАЗ
  р:=0;
  ОТ п:=ЦИФР-1 ДО п0 ПО -1 ВЫП
    УВЕЛИЧИТЬ,E[п]+X[п]);
    ЕСЛИ р >= 10 ТО
      E[п]:=р-10;
      р:=1
    ИНАЧЕ
      E[п]:;
      р:=0
    КОН
  КОН;
  ПОКА р # 0 ВЫП
    УВЕЛИЧИТЬ,E[п]);
    ЕСЛИ р >= 10 ТО
      E[п]:=р-10;
      р:=1
    ИНАЧЕ
      E[п]:;
      р:=0
    КОН;
    УМЕНЬШИТЬ(п)
  КОН
КОН Добавить;

(******************************************************************************)
ЗАДАЧА ВыводЧисла(E-:Число);  (* Вывод на экран числа E *)
ПЕР
  п:ЦЕЛ;
УКАЗ
  Вывод.ЧЦел("^   e = %d.%d",E[0],E[1],0,0);
  ОТ п:=2 ДО ЗНАКОВ ВЫП
    ЕСЛИ п ОСТАТОК 64 = 1 ТО
      Вывод.ЧЦел("^%5d:   ",п,0,0,0);
    КОН;
    Вывод.ЧЦел("%d",E[п],0,0,0)
  КОН
КОН ВыводЧисла;

(******************************************************************************)
ЗАДАЧА Расчёт;
(* Распределение памяти, расчёт по алгоритму и вывод ответа на экран *)
ПЕР
  E,X:ДОСТУП К Число;
  п0,i:ЦЕЛ;
УКАЗ
  Вывод.Цепь("^Расчёт числа 'e': 1 + 1/1 + 1/1/2 + 1/1/2/3 + ... .");
  СОЗДАТЬ(E);
  СОЗДАТЬ(X);
  X[0]:=1; (* X:=1.0 *)
  E[0]:=1; (* E:=1.0 *)
  п0:=0;
  i:=1;
  ПОВТОРЯТЬ
    Разделить(X^,i,п0);
    Добавить(E^,X^,п0);
    УВЕЛИЧИТЬ(i)
  ДО п0 = ЦИФР;
  Вывод.ЧЦел("^Всего: %d слагаемых, %d знака после запятой, %d цифр для расчёта.^",
                    i,         ЗНАКОВ,           ЦИФР,              0); 
  ВыводЧисла(E^)
КОН Расчёт;

УКАЗ
  Расчёт
КОН ЧислоЕ.




Вопросы, замечания и предложения высылайте на atimopheyev@yahoo.com или Издателю Глагола:
 email
 
Главная     ◄Глагол     ◄Азбука     ◄Задачи на Глаголе     Примеры приложений ►   Среда разработки ►   Отладка программ ►   Отличия от Оберона ►   Отличия от Паскаля ►   Ассемблер ARM ►   Глагол для ARM ►   ? и Ответы